#version 330 core
layout (triangles) in;
layout (triangle_strip, max_vertices = 18) out; // 6面 × 3顶点

in VS_OUT {
    vec2 uv;
    vec3 normal;
} gs_in[];

uniform sampler2D uTexture;
uniform float uThickness; // 拉伸厚度（如0.1）

void generateFace(vec4 pos, vec3 normal) {
    gl_Position = pos + vec4(normal * uThickness, 0.0);
    EmitVertex();
}

void main() {
    // 采样中心点Alpha值（粗略判断是否需要拉伸）
    vec2 centerUV = (gs_in[0].uv + gs_in[1].uv + gs_in[2].uv) / 3.0;
    float alpha = texture(uTexture, centerUV).a;

    if (alpha > 0.1) { // 如果不透明，则生成厚度
        // 原始正面
        for (int i = 0; i < 3; i++) {
            gl_Position = gl_in[i].gl_Position;
            EmitVertex();
        }
        EndPrimitive();

        // 拉伸侧面（沿法线方向）
        for (int i = 0; i < 3; i++) {
            vec4 pos = gl_in[i].gl_Position;
            vec3 normal = gs_in[i].normal;
            generateFace(pos, normal); // 生成拉伸面
        }
        EndPrimitive();
    }
}